|
| |||||||||||
| ||||||||||||
也谈基于Web的Form多响应技术湖南康大网景有限公司 周亚新 |
| 《计算机世界》2000年第35期B13版有一篇题为“基于Web的Form多响应技术"的文章,文中采用INPUT的SUBMIT属性传递不同的值从而进入不同的子程序,以达到“多响应" 的效果。笔者读后感到文章中的方法只能用于二三种响应的场合,真正要达到“多响应"的效果,必须采用另外的方法。现将这种基于Web的Form多响应方法介绍如下。 |
| 在HTML的Form结构中采用INPUT的SELECT属性 |
| 在HTML的Form结构中采用INPUT传递不同的值从而进入不同的子程序是一条不错的思路,但是采用INPUT的SUBMIT属性却有局限性:由于每一个SUBMIT均要占据一个按钮位置,当响应量多时将会是满屏按钮,既不美观又容易搞错。其实对于多重选择场合应当采用INPUT的SELECT属性,无论多少种选择都只占据屏幕中一小段文字的位置;提交按钮另外设置,可以及时改正错误的选择。 |
| 下面是一个页面范例的源码:用户选择所属地域,并输入姓名与密码登录。显然,如果采用INPUT的SUBMIT属性将有34个提交按钮出现在页面上,完全不可行。 |
| < HTML > |
| < HEAD > |
| < TITLE >范例< /TITLE > |
| < META HTTP-EQUIV=“Content-Type" |
| CONTENT=“text/html; charset=gb_2312-80" > |
| < /HEAD > |
| < BODY > |
| < form action=“cgi-bin/mm.pl" method=“post" > |
| < br >尊姓大名: |
| < input type=“text" name=“xm" size=10 > |
| < br >密码: |
| < input type=“password" name=“ps" size=14 > |
| < br >所在地域:< select name=“province" > |
| < option value=“01" >黑龙江 |
| < option value=“02" >吉林 |
| < option value=“03" >辽宁 |
| < option value=“04" >内蒙古 |
| < option value=“05" >天津 |
| < option value=“06" >北京 |
| < option value=“07" >河北 |
| < option value=“08" >山东 |
| < option value=“09" >河南 |
| < option value=“10" >陕西 |
| < option value=“11" >甘肃 |
| < option value=“12" >宁夏 |
| < option value=“13" >青海 |
| < option value=“14" >新疆 |
| < option value=“15" >西藏 |
| < option value=“16" >四川 |
| < option value=“17" >云南 |
| < option value=“18" >贵州 |
| < option value=“19" >重庆 |
| < option value=“20" >湖北 |
| < option value=“21" >湖南 |
| < option value=“22" >江西 |
| < option value=“23" >安徽 |
| < option value=“24" >江苏 |
| < option value=“25" >上海 |
| < option value=“26" >浙江 |
| < option value=“27" >福建 |
| < option value=“28" >广东 |
| < option value=“29" >广西 |
| < option value=“30" >海南 |
| < option value=“31" >香港 |
| < option value=“32" >澳门 |
| < option value=“33" >台湾 |
| < option value=“34" >海外 |
| < /select > |
| < br >< input type=“submit" value= |
| “填写无误,可以发出" > |
| < /form > |
| < /BODY > |
| < /HTML > |
| 在服务器端采用Perl的关联性数组进行分流 |
| 当Form中的数据提交到服务器端的CGI程序处理时,用什么方法进行分流呢?对于多重选择场合,采用单纯的if...else结构既费时又程序长,应当采用更好的结构。 |
| 在C语言中,可以用switch语句进行分流。不过CGI程序用得最多的是Perl语言,Perl语言具有极佳的稳定性、跨平台性,并且开放源码。因此,下面的CGI程序采用的是Perl5.0。 |
| Perl5.0中的关联性数组(又叫哈希结构)具有数据对应特性,适合于根据提交到服务器端的数据进行分流。 |
| 程序中的各省份用户名单是一个文本数据库,由各用户姓名、密码组成。“登录成功"、“密码错误"、“查无此人"三个子程序用于输出相应Web 页面,前一个比较复杂,后两个相当简单,故均略去。 |
| #!/usr/bin/perl |
| use CGI; |
| #调用CGI模块 |
| %p=(01= >‘黑龙江',02= >‘吉林',03= > |
| ‘辽宁',04= >‘内蒙古',05= >‘天津',06= > |
| ‘北京',07= >‘河北',08= >‘山东',09= >‘河南', |
| 10= >‘陕西',11= >‘甘肃',12= >‘宁夏',13= > |
| ‘青海',14= >‘新疆',15= >‘西藏',16= >‘四川', |
| 17= >‘云南',18= >‘贵州',19= >‘重庆',20= >‘湖北', |
| 21= >‘湖南',22= >‘江西',23= >‘安徽',24= >‘江苏', |
| 25= >‘上海',26= >‘浙江',27= >‘福建',28= >‘广东', |
| 29= >‘广西',30= >‘海南',31= >‘香港',32= >‘澳门', |
| 33= >‘台湾',34= >‘海外'); |
| #建立数字与省份的关联性数组 |
| $db=param(‘province'); |
| $dbf=$p{$db}.“用户名单"; |
| #读入省份代码,转化为相应省份用户名单 |
| $xm=param(‘xm'); |
| $ps=param(‘ps'); |
| #读入姓名、密码 |
| open (DB,“$dbf")||die “$!"; |
| #打开相应省份用户名单 |
| %qc=< DB >; |
| #将用户名单与密码读入一个关联性数组 |
| close (DB); |
| #关闭该省份用户名单 |
| if (exists $qc($xm,$db)) { |
| #检验是否有此用户 |
| if ($qc($xm)==$ps) { |
| #检验密码是否正确 |
| pass($xm);} |
| #若有此用户且密码正确,进入 |
| “登录成功"子程序 |
| else{nopass();} |
| #若有此用户但密码不正确,进入 |
| “密码错误"子程序 |
| else{nobody();} |
| #若无此用户,进入“查无此人"子程序 |
| 结 语 |
| 其实,本文所介绍方法已经有应用,例如广东视聆通 (www.21cn.com)的免费邮箱登录。 |
| 此外,本文所介绍“基于Web的Form多响应方法",每个Form仍然只能有一个服务器端程序响应,不过进行子程序分流罢了。因此这种方法适用于相似多响应,对于各响应完全不同的情况作用不大。当然,Web上同一Form各响应完全不同似乎不太可能。 |
| (网页编辑:徐向阳) |
| [关闭窗口] |
Copyright(C) ccw.com.cn,All rights reserved
中国计算机世界出版服务公司版权所有